import java.util.Arrays;

/**
 * Created with IntelliJ IDEA
 * Description
 * User: 王杰
 * Date: 2025-05-10
 * Time: 16:36
 */
public class Test {


    /**
     * 冒泡排序算法实现
     * @param array 待排序的整型数组
     */
    public static void bubbleSort(int[] array) {
        // 外层循环：控制排序的趟数，最多需要 n-1 趟（n为数组长度）
        for (int i = 0; i < array.length - 1; i++) {
            // 标志位：用于优化，记录本轮是否发生交换
            boolean flag = false;

            // 内层循环：控制每趟比较的次数，每趟结束后最大的元素会沉底
            // array.length - 1 - i 是因为：
            // -1 防止数组越界（比较j和j+1）
            // -i 表示每趟排序后，最后i个元素已经有序
            for (int j = 0; j < array.length - 1 - i; j++) {
                // 相邻元素比较：如果前大于后，则交换位置
                if (array[j] > array[j + 1]) {
                    // 经典的三步交换法
                    int tmp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = tmp;
                    // 设置标志位表示发生交换
                    flag = true;
                }
            }

            // 优化：如果某趟没有发生交换，说明数组已完全有序
            if (flag == false) {
                return; // 提前结束排序
            }

            // 此时可以观察每趟排序后的中间结果（调试用）
            // System.out.println("第" + (i+1) + "趟结果: " + Arrays.toString(array));
        }
    }

    public static void main(String[] args) {
        int[] array = {1, 2,31,4,15};
        bubbleSort(array);
        System.out.println(Arrays.binarySearch(array, 4));
    }

    public static int binarySearch(int[] array, int key) {
        int left = 0;
        int right = array.length - 1;
        while (left <= right) {
            int mid = (left + right) / 2;
            if (array[mid] == key) {
                return mid;
            } else if (array[mid] > key) {
                right = mid - 1;
            }else {
                left = mid + 1;
            }
        }
        return -1;
    }

    public static void main3(String[] args) {
        int[] array = {1, 2, 3, 4, 5};
        System.out.println(binarySearch(array, 2));
    }

    public static String myToString(int[] array) {
        String result = "[";
        for (int i = 0; i < array.length; i++) {
            if (i == array.length - 1) {
                result = result + array[i];
                break;
            }
            result = result + array[i] + ",";
        }
        result = result + "]";
        return result;
    }

    public static void main2(String[] args) {
        int[] array = {1, 2, 3, 4, 5};
        System.out.println(myToString(array));
    }

    // 求三个数的最大值
    public static int max3(int x, int y, int z) {
        return max2(max2(x, y), z);
    }

    // 求两个数的最大值
    public static int max2(int x, int y) {
        return x > y ? x : y;
    }

    public static void main1(String[] args) {
        System.out.println(max3(3, 4, 8));
    }
}
